﻿using System;
using System.Linq;
using System.Data.Linq;

namespace UniMana.Data
{
    public static class Software_RequestFormData
    {
        /// <summary>
        /// Lấy chi tiết phiếu yêu cầu
        /// </summary>
        /// <param name="nSoftware_RequestForm"></param>
        /// <param name="nPersonnel_Personnel"></param>
        /// <param name="_gPersonel_PersonelKey"></param>
        /// <param name="_iStage"></param>
        /// <param name="_iTask"></param>
        /// <param name="_iSoftware_RequestFormKey"></param>
        /// <returns></returns>

        public static IQueryable GetListDetail(this Table<Software_RequestForm> nSoftware_RequestForm,
            Table<Software_RequestFormDetail> nSoftware_RequestFormDetail,
            int _iSoftware_RequestFormKey = 0)
        {
            var values = from t in nSoftware_RequestForm
                         join t1 in nSoftware_RequestFormDetail on t.Software_RequestFormKey equals t1.Software_RequestFormKey
                         where t.Software_RequestFormKey == _iSoftware_RequestFormKey
                         orderby t1.Software_RequestFormDetailKey descending
                         select new
                         {
                            t.Software_RequestFormKey,
                            t.ID,
                            t1.Software_RequestFormDetailKey,

                            t1.Priority,                    // Độ ưu tiên
                            //t.Comments
                            t1.ListOfNumbers,
                            t1.Task,                        // Nội dung
                            t1.DateRequest,                 // Ngày yêu cầu
                            t1.RequireNotes,                // Ghi chú (yêu cầu)
                            t1.Stage,                       // Tình trạng
                            Personel_PersonelKeyRecipientDetail = t1.Personel_PersonelKeyRecipient, // Người tiếp nhận
                            t1.DateAccept,                  // Ngày tiếp nhận
                            t1.DayTaskFinish,               // Dự đoán hoàn thành
                            t1.FeedbackNotes,               // Ghi chú (tiếp nhận)
                            t1.Take,                        // Tiếp nhận
                            t1.PercentFinish,               // Phần trăm hoàn thành
                            t1.NoticeFinish,                // Báo hoàn thành
                            t1.DateFinishTrue,              // Ngày hoàn thành
                            t1.AgreeFinish,                 // Duyệt
                            t1.Cancel,                      // Hủy

                            t.Personel_PersonelKeyRequest,
                            t.Personel_PersonelKeyRecipient,
                            t.Catalogue_DepartmentKey,
                            t.Subtitle,
                         };
            return values.Distinct(); ;
        }

        /// <summary>
        /// Lấy danh sách phiếu yêu cầu
        /// </summary>
        /// <param name="nSoftware_RequestForm"></param>
        /// <param name="_gPersonel_PersonelKey"></param>
        /// <param name="_iStage"></param>
        /// <param name="_iTask"></param>
        /// <returns></returns>

        public static IQueryable GetListItem(this Table<Software_RequestForm> nSoftware_RequestForm,
            Guid _gPersonel_PersonelKey,
            int _idepartment,
            int _iStage = 0,
            int _iTask = 0)
        {
            var values = from t in nSoftware_RequestForm
                         select t;
            if (_iTask != 2)
            {
                if (_iTask == 0)
                    values = values.Where(tb => tb.Personel_PersonelKeyRequest == _gPersonel_PersonelKey);
                if (_iTask == 1)
                    values = values.Where(tb => tb.Personel_PersonelKeyRecipient == _gPersonel_PersonelKey || (tb.Catalogue_DepartmentKey == _idepartment && tb.Personel_PersonelKeyRecipient == null));
            }
            if (_iStage != 0)
                values = values.Where(tb => tb.StageKey == _iStage);
            return values;
        }

        /// <summary>
        /// Lấy mã số mã phiếu cuổi của người gửi yêu cầu
        /// </summary>
        /// <param name="nSoftware_RequestForm"></param>
        /// <param name="personelKey"></param>
        /// <returns></returns>

        public static int GetNumberRequest(this Table<Software_RequestForm> nSoftware_RequestForm,
            string Username)
        {
            var iQuery = (from query in nSoftware_RequestForm
                         where query.ID.Contains(Username + "_")
                         orderby  query.Software_RequestFormKey descending
                         select query.ID).Take(1);
            if (iQuery.Count() > 0)
            {
                string value = iQuery.FirstOrDefault().ToString();
                string[] array = value.Split('_');
                return int.Parse(array[array.Length - 1].ToString());
            }
            else
            {
                return 0;
            }
        }
    }
}
